Virtualization is a way to run multiple environments on a computer system. Virtualization is a division and sharing of physical resources such as, for example, processor, memory, Input/output (I/O) and/or storage resources, where each such set of resources operates independently with its own system image (SI) or operating system (OS) instance and applications. There has been significant effort in the computing industry to address the performance, efficiency and robustness of virtualized platforms.
The peripheral component interconnect (PCI) special interest group (SIG) has developed a single root I/O virtualization (SR-IOV) specification to address sharing of I/O devices in a standard way. The SR-IOV brings out a standard way of sharing an I/O device or PCI device for multiple users while maintaining isolation between users or virtual machines. The PCI device may comprise, for example, a conventional PCI device, a PIC-X device and/or a PCI express (PCI-E) endpoint device. The SR-IOV provides a standard mechanism for a single PCI device to appear as multiple PCI functions. The SR-IOV introduces the concept of physical functions (PFs) and virtual functions (VFs). Physical functions (PFs) are full-featured PCI functions that include a SR-IOV extended capability which is used to configure and manage the SR-IOV functionality. Virtual functions (VFs) are lightweight PCI functions that contain the resources necessary for data movement but have a carefully minimized set of configuration resources. Normally, the SR-IOV may require support in the eco-system such as the basic input/output system (BIOS), the operating system (OS) and/or the hypervisor that are running on the hardware.
A SR-IOV capable PCI device may be able to present multiple instances of itself up to the OS instance or hypervisor. The SR-IOV capable PCI device may be configured to appear in the PCI configuration space as multiple functions, each with its own configuration space completed with optional base address registers (BARs). One or more independent VFs may be assigned to a virtual machine by mapping the actual configuration spaces of the VFs to the configuration spaces presented to the virtual machine.
Further limitations and disadvantages of conventional and traditional approaches will become apparent to one of skill in the art, through comparison of such systems with the present invention as set forth in the remainder of the present application with reference to the drawings.